builder: Allow text content in <lookup>
authorBenjamin Otte <otte@redhat.com>
Mon, 25 Nov 2019 07:06:45 +0000 (08:06 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 30 May 2020 23:26:44 +0000 (19:26 -0400)
  <lookup>foo</lookup>
is now short for
  <lookup>
    <constant>foo</constant>
  </lookup>
ie it looks up the object with the given name so it can then do a
property lookup with it.

This is the most common operation, so it's a nice shortcut.

gtk/gtkbuilderparser.c

index 28247b0da74c8eb5cc5c583d8bfb4795e62f7357..0b98d68ae6093b7f0fcc4203c02a2dc7bd984267 100644 (file)
@@ -1961,6 +1961,27 @@ text (GtkBuildableParseContext  *context,
 
       g_string_append_len (expr_info->constant.text, text, text_len);
     }
+  else if (strcmp (gtk_buildable_parse_context_get_element (context), "lookup") == 0)
+    {
+      ExpressionInfo *expr_info = (ExpressionInfo *) info;
+
+      while (g_ascii_isspace (*text) && text_len > 0)
+        {
+          text++;
+          text_len--;
+        }
+      while (text_len > 0 && g_ascii_isspace (text[text_len - 1]))
+        text_len--;
+      if (expr_info->property.expression == NULL && text_len > 0)
+        {
+          ExpressionInfo *constant = g_slice_new0 (ExpressionInfo);
+          constant->tag_type = TAG_EXPRESSION;
+          constant->expression_type = EXPRESSION_CONSTANT;
+          constant->constant.type = G_TYPE_INVALID;
+          constant->constant.text = g_string_new_len (text, text_len);
+          expr_info->property.expression = constant;
+        }
+    }
 }
 
 static void